home *** CD-ROM | disk | FTP | other *** search
/ Aminet 35 / Aminet 35 (2000)(Schatztruhe)[!][Feb 2000].iso / Aminet / dev / e / cha_source.lha / cha_source / calcs.e < prev    next >
Encoding:
Text File  |  1999-12-18  |  5.1 KB  |  124 lines

  1. /*==========================================================================+
  2. | calcs.e                                                                   |
  3. | various useful calculations                                               |
  4. +--------------------------------------------------------------------------*/
  5.  
  6. OPT MODULE
  7.  
  8. /*-------------------------------------------------------------------------*/
  9.  
  10. -> reverb calculations
  11.  
  12. CONST LN1m = $C0DD0C55      -> Flog(0.001)
  13.  
  14. EXPORT PROC oss_DecayReverb2Delay(decay,reverb)
  15. ENDPROC ! Flog(decay) * reverb / LN1m
  16.  
  17. EXPORT PROC oss_DelayReverb2Decay(delay,reverb)
  18. ENDPROC ! Fexp(! LN1m * delay / reverb)
  19.  
  20. EXPORT PROC oss_DelayDecay2Reverb(delay,decay)
  21. ENDPROC ! LN1m * delay / Flog(decay)
  22.  
  23. /*-------------------------------------------------------------------------*/
  24.  
  25. -> frequency calculations
  26.  
  27.            -> 3579545    NTSC
  28. CONST CLOCK = 3546895 -> PAL
  29.  
  30. EXPORT PROC oss_Period2Frequency(period)    IS Div(CLOCK, period)
  31. EXPORT PROC oss_Frequency2Period(frequency) IS Div(CLOCK, frequency)
  32.  
  33. -> look up in table
  34. EXPORT PROC oss_NoteFinetune2Period(note, finetune)
  35.     IF (0  <  note)     AND (note     <= 36) AND
  36.        (-8 <= finetune) AND (finetune <= 7)
  37.         RETURN Int( {periodtable}       +
  38.                     ((note-1)     * 32) +
  39.                     ((finetune+8) *  2) )
  40.     ENDIF
  41. ENDPROC 0
  42.  
  43. -> search in table
  44. EXPORT PROC oss_Period2NoteFinetune(period)
  45.     DEF note0, finetune0, period0,
  46.         note1, finetune1, period1,
  47.         note,  finetune,
  48.         table : PTR TO INT, i = 0
  49.     IF (108  <=  period) AND (period <= 907)
  50.         table := {periodtable}
  51.         note := 1
  52.         finetune := -8
  53.         FOR i := 0 TO 575
  54.             IF table[i] = period
  55.                 RETURN note,finetune
  56.             ELSEIF table[i] > period
  57.                 note0     := note
  58.                 finetune0 := finetune
  59.                 period0   := table[i]
  60.             ELSEIF table[i] < period
  61.                 note1     := note
  62.                 finetune1 := finetune
  63.                 period1   := table[i]
  64.                 -> period0 > period > period1
  65.                 IF (period0 - period) > (period - period1)
  66.                     RETURN note1,finetune1
  67.                 ELSE
  68.                     RETURN note0,finetune0
  69.                 ENDIF
  70.             ENDIF
  71.             finetune++
  72.             IF finetune = 8
  73.                 finetune := -8
  74.                 note++
  75.             ENDIF
  76.         ENDFOR
  77.         -> should never be reached
  78.     ENDIF
  79. ENDPROC 0,0
  80.  
  81. -> info from "OctaMED_Soundstudio_CD:Soundstudio V1/PROGRAMMERS/proplayer.a"
  82. periodtable: -> searchable on period
  83. ->  -8  -7  -6  -5  -4  -3  -2  -1   0   1   2   3   4   5   6   7  finetune
  84. INT 907,900,894,887,881,875,868,862,856,850,844,838,832,826,820,814 -> C-1
  85. INT 856,850,844,838,832,826,820,814,808,802,796,791,785,779,774,768 -> C#
  86. INT 808,802,796,791,785,779,774,768,762,757,752,746,741,736,730,725 -> D
  87. INT 762,757,752,746,741,736,730,725,720,715,709,704,699,694,689,684 -> D#
  88. INT 720,715,709,704,699,694,689,684,678,674,670,665,660,655,651,646 -> E
  89. INT 678,675,670,665,660,655,651,646,640,637,632,628,623,619,614,610 -> F
  90. INT 640,636,632,628,623,619,614,610,604,601,597,592,588,584,580,575 -> F#
  91. INT 604,601,597,592,588,584,580,575,570,567,563,559,555,551,547,543 -> G
  92. INT 570,567,563,559,555,551,547,543,538,535,532,528,524,520,516,513 -> G#
  93. INT 538,535,532,528,524,520,516,513,508,505,502,498,495,491,487,484 -> A
  94. INT 508,505,502,498,494,491,487,484,480,477,474,470,467,463,460,457 -> A#
  95. INT 480,477,474,470,467,463,460,457,453,450,447,444,441,437,434,431 -> B
  96. INT 453,450,447,444,441,437,434,431,428,425,422,419,416,413,410,407 -> C-2
  97. INT 428,425,422,419,416,413,410,407,404,401,398,395,392,390,387,384 -> C#
  98. INT 404,401,398,395,392,390,387,384,381,379,376,373,370,368,365,363 -> D
  99. INT 381,379,376,373,370,368,365,363,360,357,355,352,350,347,345,342 -> D#
  100. INT 360,357,355,352,350,347,345,342,339,337,335,332,330,328,325,323 -> E
  101. INT 339,337,335,332,330,328,325,323,320,318,316,314,312,309,307,305 -> F
  102. INT 320,318,316,314,312,309,307,305,302,300,298,296,294,292,290,288 -> F#
  103. INT 302,300,298,296,294,292,290,288,285,284,282,280,278,276,274,272 -> G
  104. INT 285,284,282,280,278,276,274,272,269,268,266,264,262,260,258,256 -> G#
  105. INT 269,268,266,264,262,260,258,256,254,253,251,249,247,245,244,242 -> A
  106. INT 254,253,251,249,247,245,244,242,240,239,237,235,233,232,230,228 -> A#
  107. INT 240,238,237,235,233,232,230,228,226,225,224,222,220,219,217,216 -> B
  108. INT 226,225,223,222,220,219,217,216,214,213,211,209,208,206,205,204 -> C-3
  109. INT 214,212,211,209,208,206,205,203,202,201,199,198,196,195,193,192 -> C#
  110. INT 202,200,199,198,196,195,193,192,190,189,188,187,185,184,183,181 -> D
  111. INT 190,189,188,187,185,184,183,181,180,179,177,176,175,174,172,171 -> D#
  112. INT 180,179,177,176,175,174,172,171,170,169,167,166,165,164,163,161 -> E
  113. INT 170,169,167,166,165,164,163,161,160,159,158,157,156,155,154,152 -> F
  114. INT 160,159,158,157,156,155,154,152,151,150,149,148,147,146,145,144 -> F#
  115. INT 151,150,149,148,147,146,145,144,143,142,141,140,139,138,137,136 -> G
  116. INT 143,142,141,140,139,138,137,136,135,134,133,132,131,130,129,128 -> G#
  117. INT 135,134,133,132,131,130,129,128,127,126,125,125,124,123,122,121 -> A
  118. INT 127,126,125,125,123,123,122,121,120,119,118,118,117,116,115,114 -> A#
  119. INT 120,119,118,118,117,116,115,114,113,113,112,111,110,109,109,108 -> B
  120.  
  121. /*--------------------------------------------------------------------------+
  122. | END: calcs.e                                                              |
  123. +==========================================================================*/
  124.